import {fileURLToPath, URL} from 'node:url'

import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import {ElementPlusResolver} from 'unplugin-vue-components/resolvers'

function path(...args) {
  args.unshift('.', 'src');
  return fileURLToPath(new URL(args.join('/'), import.meta.url));
}

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
  resolve: {
    alias: {
      '@': path(),
      '@stores': path('stores'),
      '@views': path('views'),
      '@components': path('components'),
    }
  },
  build: {
    chunkSizeWarningLimit: 2000,
    rollupOptions: {
      output: {
        assetFileNames: '[ext]/[name].[hash].[ext]',
        chunkFileNames: 'js/[name].[hash].js',
        entryFileNames: 'js/[name].[hash].js',
        // sanitizeFileName(str) {
        //   console.log(arguments)
        //   return str.trim().toLowerCase();
        // },
        // manualChunks(path) {
        //   const handler = {
        //     'node_modules': {
        //       prefix: 'vendor', handler(path_arr, start_index) {
        //         return path_arr[start_index + 1].replace('@', '');
        //       },
        //     },
        //     'src': {
        //       prefix: 'chunk', handler(path_arr, start_index) {
        //         path_arr.splice(0, start_index + 1)
        //         return path_arr[0];
        //
        //         if (['router', 'stores', 'utils'].includes(path_arr[0])) {
        //           return path_arr[0];
        //         }
        //
        //         let last = path_arr.pop();
        //         if (last.includes('?')) {
        //           last = last.split('?').shift();
        //         }
        //         while (last.includes('.')) {
        //           last = last.split('.').shift();
        //         }
        //         if (!last) {
        //           return;
        //         }
        //         path_arr.push(last)
        //         return path_arr.join('/');
        //       },
        //     }
        //   };
        //   for (const i in handler) {
        //     if (!path.includes(i)) {
        //       continue;
        //     }
        //
        //     const item = handler[i];
        //     const arr = path.split('/');
        //     const index = arr.findIndex(val => val === i);
        //     if (index < 0) {
        //       return;
        //     }
        //     const ret = item.handler(arr, index);
        //     if (!ret) {
        //       return;
        //     }
        //
        //     return `${item.prefix}/${ret}`;
        //   }
        // }
      },
    },
  }
})
